Visualización de datos: Registro de primates en Costa Rica

Preparativos

# Carga de paquetes
library(dplyr)
library(sf)
library(DT)
library(plotly)
library(leaflet)
library(raster)
library(spData)

Carga de datos

# Carga de datos
Primates<-
  st_read("https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/gbif/primates-cr-registros.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude",
      "Y_POSSIBLE_NAMES=decimalLatitude"
    ),
    quiet = TRUE
  )

# Asignación del sistema de coordenadas
st_crs(Primates)<-4326
# Capa geoespacial de cantones
cantones <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/ign/delimitacion-territorial-administrativa/cr_cantones_simp_wgs84.geojson",
    quiet = TRUE
  )
# Cruce espacial con la tabla de cantones, para obtener el nombre del cantón
Primates <- 
  Primates %>% 
  st_join (cantones["canton"])

Tabla de registros de presencia

Primates %>%
  st_drop_geometry() %>%
  dplyr::select(family, species, stateProvince, canton, eventDate) %>%
  datatable(
    colnames = c("Familia", "Especies", "Provincia", "Cantón", "Fecha"),
    options = list(
      searchHighlight = TRUE,
      pageLength = 5,
      language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
    )
  )

Gráfico pastel de los registros de especies de primates en Costa Rica

Grafi_pie <- data.frame("categorie"=rownames(Primates), Primates)
datos <- Grafi_pie[,c('categorie', 'species', 'individualCount')]
plot_ly(datos, labels = ~species, 
        values = ~individualCount, 
        type = 'pie'
)%>% 
        layout(title ="Registro de especies de primates y su porcentaje",
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE), 
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         list(pieLength = 5,
      language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')))

Creación de capas

# Especie de monos ardillas (Saimiri oerstedii)
Mono_ardi<-
  Primates%>%
  filter(species == "Saimiri oerstedii")

# Especie de monos aulladores (Alouatta palliata)
Mono_aullad<-
  Primates%>%
  filter(species == "Alouatta palliata")

# Especie de monos capuchinos (Cebus capucinus)
Mono_capuch<-
  Primates%>%
  filter(species == "Cebus capucinus")

# Especie de monos arañas (Ateles geoffroyi)
Mono_arañ<-
  Primates%>%
  filter(species == "Ateles geoffroyi")

# Obtención de la capa de altitud
alt<- getData(
  "worldclim",
  var = "alt",
  res = .5,
  lon = -84,
  lat = 10
)

# Recorte de la capa de altitud
altitud <-crop(alt, extent(-86,-82.3, 8, 11.3)) 

Colors<- colorNumeric(c("green", "yellow", "pink"),
                     values(altitud),
                     na.color = "transparent")

Mapa de distribución de primates

# Mapa de registros de presencia
Primates %>%
  dplyr::select(stateProvince,
         family,
         canton,
         species,
         basisOfRecord,
         scientificName,
         eventDate,
         decimalLongitude,
         decimalLatitude) %>%
  leaflet() %>%
  addProviderTiles(providers$OpenStreetMap.Mapnik, group = "OpenStreetMap") %>%
  addProviderTiles(providers$Stamen.TonerLite, group = "Stamen Toner Lite") %>%
  addProviderTiles(providers$Esri.WorldImagery, group = "Imágenes de ESRI") %>%
  addRasterImage(
    altitud,
    colors = Colors,
    opacity = 0.5,
    group = "altitud")%>%
  addCircleMarkers(
    data = Mono_aullad,
    stroke = F,
    radius = 2,
    fillColor = "red",
    fillOpacity = 0.5,
    popup = paste(
      Primates$stateProvince,
      Primates$family,
      Primates$canton,
      Primates$species,
      Primates$basisOfRecord,
      Primates$scientificName,
      Primates$eventDate,
      Primates$decimalLongitude,
      Primates$decimalLatitude,
      sep = '<br/>'
    ),
    group = "Mono_aullad"
)%>%
    addCircleMarkers(
    data = Mono_ardi,
    stroke = F,
    radius = 2,
    fillColor = "orange",
    fillOpacity = 0.5,
    popup = paste(
      Primates$stateProvince,
      Primates$family,
      Primates$canton,
      Primates$species,
      Primates$basisOfRecord,
      Primates$scientificName,
      Primates$eventDate,
      Primates$decimalLongitude,
      Primates$decimalLatitude,
      sep = '<br/>'
    ),
    group = "Mono_ardi"
)%>%
    addCircleMarkers(
    data = Mono_arañ,
    stroke = F,
    radius = 2,
    fillColor = "blue",
    fillOpacity = 0.5,
    popup = paste(
      Primates$stateProvince,
      Primates$family,
      Primates$canton,
      Primates$species,
      Primates$basisOfRecord,
      Primates$scientificName,
      Primates$eventDate,
      Primates$decimalLongitude,
      Primates$decimalLatitude,
      sep = '<br/>'
    ),
    group = "Mono_arañ"
)%>%
  addCircleMarkers(
    data = Mono_capuch,
    stroke = F,
    radius = 2,
    fillColor = "black",
    fillOpacity = 0.5,
    popup = paste(
      Primates$stateProvince,
      Primates$family,
      Primates$canton,
      Primates$species,
      Primates$basisOfRecord,
      Primates$scientificName,
      Primates$eventDate,
      Primates$decimalLongitude,
      Primates$decimalLatitude,
      sep = '<br/>'
    ),
    group = "Mono_capuch")%>%
    
  addLayersControl(
    baseGroups = c("OpenStreetMap", "Stamen Toner Lite", "Imágenes de ESRI"),
    overlayGroups = c("altitud", "Mono_aullad", "Mono_ardi", "Mono_arañ", "Mono_capuch")
  ) %>%
  addMiniMap(
    tiles = providers$Stamen.OpenStreetMap.Mapnik,
    position = "bottomleft",
    toggleDisplay = TRUE
  )